Questo esempio è basato sull'esempio RobotExample.py.
È possibile usare direttamente questo file se si vuole.
Esempio di come utilizzare la classe robot di base Robot6Axis che rappresenta un robot industriale a 6 assi. Il modulo Robot dipende da Part ma non da altri moduli. Funziona principalmente con i tipi base Placement, Vector e Matrix. Quindi abbiamo bisogno solo di:
from Robot import *
from Part import *
from FreeCAD import *
creare il robot. Se non si specifica un'altra cinematica diventa un Puma 560
rob = Robot6Axis()
print rob
accedere all'asse e alla TCP. Gli assi vanno da 1 a 6 e sono in gradi:
Start = rob.Tcp
print Start
print rob.Axis1
spostare il primo asse del robot:
rob.Axis1 = 5.0
il TCP è cambiato (cinematica in avanzamento)
print rob.Tcp
muovere il robot in posizione di partenza (cinematica inversa):
rob.Tcp = Start
print rob.Axis1
lo stesso con l'asse 2:
rob.Axis2 = 5.0
print rob.Tcp
rob.Tcp = Start
print rob.Axis2
Viapunti:
w = Waypoint(Placement(),name="Pt",type="LIN")
print w.Name,w.Type,w.Pos,w.Cont,w.Velocity,w.Base,w.Tool
generare di più. La traiettoria trova sempre automaticamente un nome unico per i viapunti
l = [w]
for i in range(5):
l.append(Waypoint(Placement(Vector(0,0,i*100),Vector(1,0,0),0),"LIN","Pt"))
creare una traiettoria
t = Trajectory(l)
print t
for i in range(7):
t.insertWaypoints(Waypoint(Placement(Vector(0,0,i*100+500),Vector(1,0,0),0),"LIN","Pt"))
vedere un elenco di tutti i viapunti:
print t.Waypoints
del rob,Start,t,l,w
Lavorare con gli oggetti del documento robot: creare prima un robot nel documento attivo
if(App.activeDocument() == None):App.newDocument()
App.activeDocument().addObject("Robot::RobotObject","Robot")
Definire la rappresentazione visiva e la definizione cinematica (vedere Robot 6-Axis e Preparazione VRML per la simulazione di robot per dettagli su questo)
App.activeDocument().Robot.RobotVrmlFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.wrl"
App.activeDocument().Robot.RobotKinematicFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.csv"
posizione iniziale dell'asse (solo quella che differisce da 0)
App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis3 = 90
recuperare la posizione TCP
pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp
muovere il robot
pos.move(App.Vector(-10,0,0))
FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos
creare un oggetto Traiettoria vuota nel documento attivo
App.activeDocument().addObject("Robot::TrajectoryObject","Trajectory")
ottenere la traiettoria
t = App.activeDocument().Trajectory.Trajectory
aggiungere la posizione TCP effettiva del robot alla traiettoria
StartTcp = App.activeDocument().Robot.Tcp
t.insertWaypoints(StartTcp)
App.activeDocument().Trajectory.Trajectory = t
print App.activeDocument().Trajectory.Trajectory
inserire altri viapunti e il punto di partenza alla fine di nuovo:
for i in range(7):
t.insertWaypoints(Waypoint(Placement(Vector(0,1000,i*100+500),Vector(1,0,0),i),"LIN","Pt"))
t.insertWaypoints(StartTcp) # end point of the trajectory
App.activeDocument().Trajectory.Trajectory = t
print App.activeDocument().Trajectory.Trajectory
Da fare.....
La traiettoria è esportata da Python. Ciò significa che per ogni tipo di cabina c'è un post-processore modulo Python. Qui è descritto in dettaglio il post-processore Kuka
from KukaExporter import ExportCompactSub
ExportCompactSub(App.activeDocument().Robot,App.activeDocument().Trajectory,'D:/Temp/TestOut.src')
ed è più o meno così che si fa:
for w in App.activeDocument().Trajectory.Trajectory.Waypoints:
(A,B,C) = (w.Pos.Rotation.toEuler())
print ("LIN {X %.3f,Y %.3f,Z %.3f,A %.3f,B %.3f,C %.3f} ; %s"%(w.Pos.Base.x,w.Pos.Base.y,w.Pos.Base.z,A,B,C,w.Name))